#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
@Time 2024-01-31 23:42
@Author: wanbo
@Despcription: 文本处理
'''

# 与其他语言不同，特殊字符如 \n 在单引号（'...' ）和双引号（"..." ）里的意义一样。
# 这两种引号唯一的区别是，不需要在单引号里转义双引号 " （但此时必须把单引号转义成 \' ），反之亦然。

# 文本拼接
str1 = "hello"
str2 = "world"
print(str1 + " " + str2) # hello world

# 打印转义与原始字符串
print("hello \"bob\"")    # hello "bob"
print(r"hello \"bob\"")   # hello \"bob\"

# 大段字符用3引号
print("""\
    I am a good programmer
    I love programming
""")

# 文本重复
print("hello " * 3)  # hello hello hello

# 字面值自动拼接， 不需要+号
print("hello " "bob"
      " you are my "
      "best friend.") #  hello bob you are my best friend.

# 字符串本身是列表类型， 支持下标访问和切片
# TODO: Python中只有字符串， 没有字符， 所以'a' 代表长度为一的字符串
str = "hello"
print(str[1])   # e   TODO: 字面值字符串为 immutable对象， 只能访问， 不能修改， 因此str[1] 不能被再次赋值
print(str[1:4]) # ell TODO: 切片时， 左含又不含
print(str[-1])  # o   TODO: -0和0是相同的位置， 所以， -1才是字符串的最后一个字符
print(str[:2])  # he
print(str[2:])  # llo
print(len(str[1:4]))  # 3 = 4-1 TODO: 切片长度是索引之差
print(str[1:10000])   # ello    TODO: 切片会自动处理索引越界问题， 但是单独索引访问越界时会报错
